package com.wy._02io.resources;


import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Paths;

// 其实不能用，可以在日常编码里面使用，但是实际是不能使用的，因为 打成jar包是无法写入的。
public class WriteResourceFileUtil {
    private static final String BASE_PATH = "src/main/resources/";

    /**
     * 将字节数组写入到指定路径的文件中，使用缓冲输出流提高写入效率
     *
     * @param bytes    要写入的字节数组
     * @param path     相对路径
     * @param fileName 文件名
     * @return 写入成功返回 true，否则返回 false
     */
    public static boolean write(byte[] bytes, String path, String fileName) {
        // 构建完整的文件路径
        String fullPath = BASE_PATH + path + "/" + fileName;
        File file = new File(fullPath);
        // 创建目标目录
        try {
            Files.createDirectories(Paths.get(BASE_PATH + path));
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }
        // 使用缓冲输出流写入数据
        try (BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file))) {
            bos.write(bytes);
            // 刷新缓冲区，确保数据全部写入
            bos.flush();
            return true;
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }
    }

    /**
     * 将字符串内容以指定的字符集写入到指定路径的文件中，使用缓冲输出流提高写入效率
     *
     * @param content  要写入的字符串内容
     * @param path     相对路径
     * @param fileName 文件名
     * @param encode   字符集编码
     * @return 写入成功返回 true，否则返回 false
     */
    public static boolean write(String content, String path, String fileName, Charset encode) {
        // 将字符串内容转换为字节数组
        byte[] bytes = content.getBytes(encode);
        // 调用上面的 write 方法写入文件
        return write(bytes, path, fileName);
    }
}
